#include<stdio.h>
#include<stdlib.h>
// 栈的链表操作也是四个，判断栈满，栈空。进栈出栈。
typedef struct LNode 
{
	int data;
	struct LNode *next;
	
}LNode;
int init(LNode *&lst){
	lst->next=NULL;
	return 1;
}
int isEmpty(LNode *lst){
	if(lst->next==NULL){
		return 1;

	}else
		return 0;
}
//理论上空间足够大，栈基本上不会满
int pushStack(LNode *&lst,int x){
	printf("插入值：%d\n", x);
	LNode *s = (LNode*)malloc(sizeof(LNode));
	s->data=x;
	//头插法
	s->next=lst->next;
	lst->next=s;
	return 1;
}

int pullStack(LNode *&lst,int &x){
	if(lst->next==NULL){
		printf("出栈操作异常，栈空\n");
		return 0;
	}
	else
	{
		LNode *p;
		p= lst->next;
		x = p->data;
		//printf("出栈值：%d\n", x);
		lst->next=p->next;
		free(p);
		return 1;
	}

}

int main(){
	int a[]={1,2,3,4,5,6,7,8,9};
	LNode *lst =(LNode*)malloc(sizeof(LNode));

	init(lst);

	for(int i=0;i<9;i++){
		pushStack(lst,a[i]);
	}
	int x=0;
	while(!isEmpty(lst)){
		pullStack(lst,x);
		printf("%d\n",x );
	}

	return 0;
}
